// 1. 导入 express 框架
const express = require('express')
// 2. 创建服务器实例
const app = express()

// 导入 body-parser 插件
const bodyParser = require("body-parser")
// 导入 jsonwebtoken 用于生成 token
const jwt = require('jsonwebtoken')

// 注册
app.use(bodyParser.json())

// 预设的用户名和密码（硬编码在程序中）
const users = [
  {
    id: 1,
    username: 'admin',
    account: 'admin_qwaszx123',
    password: '123456',
    nickname: '管理员',
    gender: '男',
    avatar: 'https://img.keaitupian.cn/newupload/11/1668419337598639.jpg',
    bgImage: 'https://bpic.588ku.com/back_pic/06/17/84/816329dd902e9e6.jpg',
    registerTime: new Date().toLocaleString(),
    lastLoginIP: '127.0.0.1',
    loginTime: new Date().toLocaleString()
  },
  {
    id: 2,
    username: 'user1',
    account: 'user1_ghwqhd789',
    password: '123456',
    nickname: '普通用户',
    gender: '女',
    avatar: 'https://c-ssl.dtstatic.com/uploads/blog/202310/06/3BSWQdJOszV5e25.thumb.400_0.jpg',
    bgImage: 'https://vip.123pan.cn/1821652950/123pan/123panlikebizhi/240104095005.jpg',
    registerTime: new Date().toLocaleString(),
    lastLoginIP: '127.0.0.1',
    loginTime: new Date().toLocaleString()
  }
]

// JWT 密钥（实际项目中应该使用环境变量）
const JWT_SECRET = 'test'

// 登录接口
app.post("/api/login", (req, res) => {
  const { username, password } = req.body

  // 验证是否提供了用户名和密码
  if (!username || !password) {
    return res.send({
      status: 400,
      msg: '用户名和密码不能为空',
      data: null
    })
  }

  // 查找用户
  const user = users.find(u => u.username === username && u.password === password)

  if (!user) {
    return res.send({
      status: 401,
      msg: '用户名或密码错误',
      data: null
    })
  }

  // 生成 token（有效期 7 天）
  const token = jwt.sign(
    {
      id: user.id,
      username: user.username
    },
    JWT_SECRET,
    { expiresIn: '7d' }
  )

  console.log(`用户 ${user.username} 登录成功！登录时间为${new Date().toLocaleString()}。`);

  // 返回 token 和用户信息（不包含密码）
  res.send({
    status: 200,
    msg: '登录成功',
    data: {
      token: token,
      userInfo: {
        id: user.id,
        username: user.username,
        account: user.account,
        nickname: user.nickname,
        avatar: user.avatar,
        bgImage: user.bgImage,
        gender: user.gender,
        registerTime: user.registerTime,
        lastLoginIP: user.lastLoginIP,
        loginTime: user.loginTime
      }
    }
  })
})

// 表单提交
app.post("/api/question", (req, res) => {
  // 打印在服务器上
  console.log(req.body);
  // 打印在页面
  res.send({
    staus: 200,
    msg: '问题提交成功！',
    data: req.body
  })
})

// 4. 调用 listen ，端口号
app.listen(3000, () => {
  console.log('服务器已开启...');
})
